package cn.fivestars.springcloud.order.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * Config
 * {@link com.netflix.loadbalancer.RoundRobinRule}   轮询
 * {@link com.netflix.loadbalancer.RandomRule}  随机
 * {@link com.netflix.loadbalancer.RetryRule} 先按照 RoundRobinRule 策略获取服务, 如果获取失败, 则在指定时间内进行重试
 * {@link com.netflix.loadbalancer.WeightedResponseTimeRule} RoundRobinRule 的扩展, 响应速度越快的实例权重越大,越容易被选择
 * {@link com.netflix.loadbalancer.BestAvailableRule} 会先过滤掉因多次访问故障而处于断路器跳闸状态的服务, 然后选择一个并发量最小的服务
 * {@link com.netflix.loadbalancer.AvailabilityFilteringRule} 先过滤掉故障实例, 再选择并发量较小的实例
 * {@link com.netflix.loadbalancer.ZoneAvoidanceRule} 默认规则, 复合判断 server 所在区域的性能和 server 的可用性, 进行选择
 *
 * @author liangchenzhou1024@163.com
 * @date 2021/2/1
 */
@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    // 去掉默认的负载均衡, 要么自定义的负载均衡算法生效, 要么报错
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}
